﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using Tecnopez.Globals;
using BussinessLogicTecnoPez.Seguridad_Tecnopez;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using BussinessLogicTecnoPez;
using Microsoft.Practices.EnterpriseLibrary.Validation;

namespace TecnoPezWeb.Modules.Seguridad
{
    public partial class ABMUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack == false)
            {
                SetMode(PageMode.ListMode);
            }

            TPPEmpleado.ObjType = typeof(Empleado);
            TPPRol.ObjType = typeof(Rol);

            InicializarValidadores();
            InicializarGrilla();

            cmdEliminar.OnClientClick="return confirm('Esta seguro de eliminar el registro?');";

            GenericMasterPage master = (GenericMasterPage)this.Master;
            master.Imagen = "../Styles/Icons/empleados.gif";
            master.Titulo = "Gestión de Usuarios";
            cargarGrilla();
            _lblError.Text = "";
        }

        private void InicializarGrilla()
        {
            grdUsuarios.setupGrid<Usuario>(cargarGrilla, seleccionarUsuario,null, true, this.ViewState);
        }

        private void seleccionarUsuario(int o)
        {
            int IdUsuario = int.Parse(grdUsuarios.grdDatosAbmView.DataKeys[o].Value.ToString());
            Usuario.getManager.ClearFilters();
            Usuario.getManager.AddFilter("IDUSUARIO", GenericManager<Usuario>.filterOperator.Equals, IdUsuario);
            Usuario objUsuario = Usuario.getManager.GetOne();
            txtID.Text = objUsuario.IdUsuario.ToString();
            txtNombre.Text = objUsuario.Nombre.Trim();
            txtContrasenia.Text = objUsuario.Contrasenia.ToString().Trim();
            if (objUsuario.Baja == "N")
                chkEstado.Checked = true;
            else
                chkEstado.Checked = false;

            if (objUsuario.Empleado != null)
                TPPEmpleado.ItemSelected = objUsuario.Empleado;
            else
                TPPEmpleado.ItemSelected = null;

            if (objUsuario.Rol != null)
                TPPRol.ItemSelected = objUsuario.Rol;
            else
                TPPRol.ItemSelected = null;

            SetMode(PageMode.ViewMode);
        }

        private void SetMode(PageMode mode)
        {
            ViewState["PageMode"] = mode;
            switch (mode)
            {
                case PageMode.ListMode:
                    wzrABM.ActiveStepIndex = 0;
                    break;
                case PageMode.NewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtNombre.Enabled = true;
                    txtContrasenia.Enabled = true;
                    chkEstado.Enabled = false;
                    TPPEmpleado.Enable = true;
                    TPPRol.Enable = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.EditMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtNombre.Enabled = true;
                    txtContrasenia.Enabled = true;
                    TPPEmpleado.Enable = true;
                    TPPRol.Enable = true;
                    chkEstado.Enabled = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.ViewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtNombre.Enabled = false;
                    txtContrasenia.Enabled = false;
                    TPPEmpleado.Enable = false;
                    TPPRol.Enable = false;
                    chkEstado.Enabled = false;
                    cmdAceptar.Visible = false;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = true;
                    cmdEliminar.Enabled = true;
                    break;
            }

        }

        private void cargarGrilla()
        {
            Usuario.getManager.ClearFilters();
            Usuario.getManager.ClearOrders();
            Usuario.getManager.AddFilter("Nombre", GenericManager<Usuario>.filterOperator.Like, "%" + txtBuscarNombre.Text.Trim() + "%");

            if (chkBuscarEstado.Items[0].Selected && !chkBuscarEstado.Items[1].Selected)
            {
                Usuario.getManager.AddFilter("Baja", GenericManager<Usuario>.filterOperator.Distinct, "S");
            }

            if (!chkBuscarEstado.Items[0].Selected && chkBuscarEstado.Items[1].Selected)
            {
                Usuario.getManager.AddFilter("Baja", GenericManager<Usuario>.filterOperator.Distinct, "N");
            }

            if (ViewState["orden"] == null)
            {
                Usuario.getManager.AddOrder("IdUsuario", GenericManager<Usuario>.Order.orderDirection.DESC);
            }
            else
            {
                Usuario.getManager.AddOrder(ViewState["orden"].ToString(), (GenericManager<Usuario>.Order.orderDirection)ViewState["ordenDireccion"]);
            }

            List<Usuario> lista = new List<Usuario>();
            lista = Usuario.getManager.GetFilter();
            grdUsuarios.grdDatosAbmView.DataSource = lista;
            grdUsuarios.grdDatosAbmView.DataBind();

        }

        protected void cmdEditar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.EditMode);
        }
        protected void cmdEliminar_Click(object sender, EventArgs e)
        {
            Usuario objUser = new Usuario();
            objUser.IdUsuario = int.Parse(this.txtID.Text.Trim());
            Usuario.getManager.Delete(objUser);

            SetMode(PageMode.ListMode);
            cargarGrilla();
        }
        protected void cmdAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                Usuario objUser = new Usuario();
                objUser.Nombre = txtNombre.Text.Trim();
                objUser.Contrasenia = txtContrasenia.Text.Trim();
                if (chkEstado.Checked)
                    objUser.Baja = "N";
                else
                    objUser.Baja = "S";

                if (TPPRol.ItemSelected != null)
                {
                    Rol objRol = new Rol();
                    objRol = (Rol)TPPRol.ItemSelected;
                    objUser.Rol = objRol;
                    objRol = null;
                }

                if (TPPEmpleado.ItemSelected != null)
                {
                    Empleado objEmpleado = new Empleado();
                    objEmpleado = (Empleado)TPPEmpleado.ItemSelected;
                    objUser.Empleado = objEmpleado;
                    objEmpleado = null;
                }

                if (validar(objUser))
                {
                    if (getMode() == PageMode.NewMode)
                    {
                        if (Usuario.getManager.Insert(objUser) != true)
                        {
                            throw Usuario.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ListMode);
                        cargarGrilla();
                    }
                    else
                    {
                        objUser.IdUsuario = int.Parse(txtID.Text.Trim());
                        if (Usuario.getManager.Update(objUser) != true)
                        {
                            throw Usuario.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ViewMode);
                    }
                }
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.NewMode);
            }
        }

        private bool validar(Usuario objeto)
        {
            ValidationResults v = Validation.Validate<Usuario>(objeto);
            if (!v.IsValid)
            {
                _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
            }
            return v.IsValid;

        }

        private void InicializarValidadores()
        {
            PPVNombre.SourceTypeName = "BussinessLogicTecnoPez.Seguridad_Tecnopez.Usuario";
            PPVNombre.ControlToValidate = "txtNombre";
            PPVNombre.PropertyName = "Nombre";
            PPVNombre.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVContrasenia.SourceTypeName = "BussinessLogicTecnoPez.Seguridad_Tecnopez.Usuario";
            PPVContrasenia.ControlToValidate = "txtContrasenia";
            PPVContrasenia.PropertyName = "Contrasenia";
            PPVContrasenia.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVEmpleado.SourceTypeName = "BussinessLogicTecnoPez.Seguridad_Tecnopez.Usuario";
            PPVEmpleado.ControlToValidate = "txtNombre";
            PPVEmpleado.PropertyName = "Empleado";
            PPVEmpleado.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVRol.SourceTypeName = "BussinessLogicTecnoPez.Seguridad_Tecnopez.Usuario";
            PPVRol.ControlToValidate = "txtNombre";
            PPVRol.PropertyName = "Rol";
            PPVRol.DisplayMode = ValidationSummaryDisplayMode.List;
        }

        private PageMode getMode()
        {
            /*if (ViewState["PageMode"] == null)
                return PageMode.ModeNotFound;*/
            return (PageMode)ViewState["PageMode"];
        }

        protected void cmdCancelar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.ListMode);
        }
        protected void cmdNuevo_Click(object sender, EventArgs e)
        {
            txtID.Text = "";
            txtNombre.Text = "";
            txtContrasenia.Text = "";
            chkEstado.Checked = true;
            TPPRol.ItemSelected = null;
            TPPEmpleado.ItemSelected = null;

            SetMode(PageMode.NewMode);
        }
        protected void PPVEmpleado_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
        {
            if (TPPEmpleado.ItemSelected == null)
            {
                e.ConvertedValue = null;
            }
            else
            {
                e.ConvertedValue = TPPEmpleado.ItemSelected.ToString();
            }
        }
        protected void PPVRol_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
        {
            if (TPPRol.ItemSelected == null)
            {
                e.ConvertedValue = null;
            }
            else
            {
                e.ConvertedValue = TPPRol.ItemSelected.ToString();
            }
        }
}
}